iT邦幫忙

1

[ JS個人筆記 ] Async / Await—DAY10

  • 分享至 

  • xImage
  •  

特點

  • Async Await 為 Promise 延伸出的特性,是 Promise 的語法糖
  • 函式本體是屬於非同步,但內部以 “同步的方式運行非同步” 程式碼
  • 更加簡潔處理非同步事件,提高程式碼可讀性
  • 使用 try...catch 管理流程,將非同步事件置入於 try 流程內,當遇到錯誤時則在 catch 區塊內接取錯誤訊息

各情況範例

與 Promise 搭配執行

let event = (num) => Math.floor(Math.random() *num)>2 ? true : false
let timer = (num) => Math.floor(Math.random() * num)*1000


let condition = function(something,timer,num) {
  return new Promise((resolve,reject)=>{
    setTimeout(function(){
      if(something) {
          resolve('第'+ num +".成功了花了"+timer+'秒');
      } else {
          reject('第'+ num +'次失敗QQ');
      }
    },timer)
  })
}

//----------------------------只有一個非同步事件的情況----------------------------------

async function example() {
    try{
      const res1 = await condition(event(5),timer(5),1)
      console.log('event1:',res1)
    }
    catch(err){
      console.log('失敗:',err)
    }
}

//---------若是兩個事件以上,只要其中一個出現錯誤,即進入catch的階段,並不在繼續往下執行-----------

async function example() {
    try{
      const res1 = await condition(event(5),timer(5),1)
      console.log('event1:',res1)
      const res2 = await condition(event(5),timer(5),2)
      console.log('event2:',res2)
      const res3 = await condition(event(5),timer(5),3)
      console.log('event3:',res3)
    }
    catch(err){
      console.log('失敗:',err)
    }
}

/*----------與 Promise.all() 搭配,在全部完成後才進行下一步,若事件都成功,則印出陣列回復,若其中rejected,.catch立即回傳第一個完成的失敗回復-----------*/
            
//-----與 Promise.race() 搭配,其中一事件先完成(不論成功與否),即進入對應的try...catch----------

async function example() {
    try{
      const res = await Promise.all([condition(event(5),timer(5),1),condition(event(5),timer(5),2),condition(event(5),timer(5),3),condition(event(5),timer(5),4)])
      console.log(res)
    }
    catch(err){
      console.log('失敗:',err)
    }
}

//----------------------------------------------------------------------------------
example()

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言